﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Windows.Shapes;

namespace GBlason.ViewModel.Contract
{
    /// <summary>
    /// Contains the mark and the features for all the CoA component that can have children
    /// </summary>
    public interface IChildContainer
    {
        /// <summary>
        /// Gets or sets the list of children.
        /// </summary>
        /// <value>
        /// The list of children.
        /// </value>
        ObservableCollection<CoatOfArmComponent> Children { get; }

        /// <summary>
        /// Removes the child.
        /// </summary>
        /// <param name="child">The child.</param>
        void RemoveChild(CoatOfArmComponent child);

        /// <summary>
        /// Adds the child.
        /// </summary>
        /// <param name="child">The child.</param>
        void AddChild(CoatOfArmComponent child);

        /// <summary>
        /// Gets or sets the parent.
        /// </summary>
        /// <value>
        /// The parent.
        /// </value>
        IChildContainer Parent { get; set; }

        /// <summary>
        /// Gets the root parent.
        /// </summary>
        IChildContainer RootParent { get; }

        /// <summary>
        /// Gets or sets a value indicating whether this instance is expanded.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is expanded; otherwise, <c>false</c>.
        /// </value>
        bool IsExpanded { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether this instance is selected.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is selected; otherwise, <c>false</c>.
        /// </value>
        bool IsSelected { get; set; }
    }
}
